home *** CD-ROM | disk | FTP | other *** search
/ C & C++ Multimedia Cyber Classroom / C and C++ Multimedia Cyber Classroom (Prentice Hall) (1998).iso / src / fig15_12.jar / Ch15 / Fig15_12 / QUEUE / QUEUE.H < prev    next >
C/C++ Source or Header  |  1997-08-26  |  2KB  |  95 lines

  1. // QUEUE.H
  2. // Definition of class Queue
  3. #ifndef QUEUE_H
  4. #define QUEUE_H
  5.  
  6. #include <iostream.h>
  7. #include <assert.h>
  8. #include "queuend.h"
  9.  
  10. template <class T>
  11. class Queue {
  12. public:
  13.    Queue();              // default constructor
  14.    ~Queue();             // destructor
  15.    void enqueue( T & );  // insert item in queue
  16.    T dequeue();          // remove item from queue
  17.    int isEmpty() const;  // is the queue empty?
  18.    void print() const;   // output the queue
  19. private:
  20.    QueueNode<T> *headPtr;  // pointer to first QueueNode
  21.    QueueNode<T> *tailPtr;  // pointer to last QueueNode
  22. };
  23.  
  24. // Member function definitions for class Queue
  25. template <class T>
  26. Queue<T>::Queue() { headPtr = tailPtr = 0; }
  27.  
  28. template <class T>
  29. Queue<T>::~Queue()
  30. {
  31.    QueueNode<T> *tempPtr, *currentPtr = headPtr;
  32.  
  33.    while ( currentPtr != 0 ) {
  34.       tempPtr = currentPtr;
  35.       currentPtr = currentPtr->nextPtr;
  36.       delete tempPtr;
  37.    }
  38. }
  39.  
  40. template <class T>
  41. void Queue<T>::enqueue( T &d )
  42. {
  43.    QueueNode<T> *newPtr = new QueueNode<T>( d );
  44.    assert( newPtr != 0 );  // was memory allocated?
  45.  
  46.    if ( isEmpty() )
  47.       headPtr = tailPtr = newPtr;
  48.    else {
  49.       tailPtr->nextPtr = newPtr;
  50.       tailPtr = newPtr;
  51.    }
  52. }
  53.  
  54. template <class T>
  55. T Queue<T>::dequeue()
  56. {
  57.    assert( !isEmpty() );
  58.  
  59.    QueueNode<T> *tempPtr = headPtr;
  60.  
  61.    headPtr = headPtr->nextPtr;
  62.    T value = tempPtr->data;
  63.    delete tempPtr;
  64.  
  65.    if ( headPtr == 0 )
  66.       tailPtr = 0;
  67.  
  68.    return value;
  69. }
  70.  
  71. template <class T>
  72. int Queue<T>::isEmpty() const { return headPtr == 0; }
  73.  
  74. template <class T>
  75. void Queue<T>::print() const
  76. {
  77.    QueueNode<T> *currentPtr = headPtr;
  78.  
  79.    if ( isEmpty() )          // Queue is empty
  80.       cout << "Queue is empty" << endl;
  81.    else {                    // Queue is not empty
  82.       cout << "The queue is:" << endl;
  83.  
  84.       while ( currentPtr != 0 ) {
  85.          cout << currentPtr->data << ' ';
  86.          currentPtr = currentPtr->nextPtr;
  87.       }
  88.  
  89.       cout << endl;
  90.    }
  91. }
  92.  
  93. #endif
  94.  
  95.